﻿/**********************************************************/
/* 5-10-2010 - Jeroen van Eijk - 0911305	        	  */
/*							                              */
/* Interface voor Vak                                     */
/**********************************************************/

using Roborally.CommonData.Enums;

namespace Roborally.CommonData.GlobaleTypes
{
    /// <summary>
    /// Interface voor Speler
    /// Deze interface levert de functionaliteit van een onderzoeken of er een muur is en het het type van de onderliggende subklasse ophalen.
    /// </summary>
    public interface IVak
    {
        /// <summary>
        /// Een methode om op te vragen of op een bepaalde plaats een muur staat.
        /// </summary>
        /// <param name="richting">De kant van het hokje waar gecheckt wordt of er een muur staat.</param>
        /// <returns>True wanneer op de aangegeven plaats een muur staat</returns>
        bool KrijgMuur(Richting richting);

        /// <summary>
        /// Method die het VakType van de onderliggende subklasse retourneert
        /// </summary>
        /// <returns>VakType van de onderliggende subklasse</returns>
        VakType KrijgType();

        /// <summary>
        /// Geeft de richting van het object terug indien van toepassing.
        /// </summary>
        /// <returns>Richting van het object</returns>
        Richting KrijgRichting();

        /// <summary>
        /// Geeft de draairichting van het object terug indien van toepassing.
        /// </summary>
        /// <returns>Draairichting van het object</returns>
        DraaiRichting KrijgDraairichting();

        /// <summary>
        /// Geeft het bandtype van het object terug indien van toepassing.
        /// </summary>
        /// <returns>BandType van het object</returns>
        BandType KrijgBandType();

        /// <summary>
        /// Geeft het checkpoint nummer van het object terug indien van toepassing.
        /// </summary>
        /// <returns>Checkpoint nummer van het object</returns>
        int CheckpointNummer();

        /// <summary>
        /// Geeft de dimensie van het object terug indien van toepassing.
        /// </summary>
        /// <returns>Dimensie van het object</returns>
        Dimensie KrijgDimensie();

        /// <summary>
        /// Geeft of er een lasermondin het vak bevind indien van toepassing.
        /// </summary>
        /// <returns>True als er een lasermond in zit</returns>
        bool KrijgLaserMond();

        /// <summary>
        /// Geeft de kracht van het object terug indien van toepassing.
        /// </summary>
        /// <returns>Kracht van het object</returns>
        int KrijgKracht();

        /// <summary>
        /// Geeft aan of het object deze beurt actief is terug indien van toepassing.
        /// </summary>
        /// <returns>True indien actief deze beurt</returns>
        bool Actief(int beurt);
    }
}
